const db = require('../db/index')
const bcrypt = require('bcrypt')
//导入jwt 用于生成token
const jwt = require('jsonwebtoken')
//导入jwtconfig生成文件 
const { generateToken } = require('../jwt_config/authMiddleware')

//注册逻辑
exports.register = (req, res) => {
    const reginfo = req.body
    //判断前端传来的数据是否为空
    if (reginfo.account == null || reginfo.password == null) {
        return res.send({
            status: 1,
            message: '账户密码不可以为空'
        })
    }
    //判断前端传来的数据是否在注册表中存在
    const selectsql = 'select * from  users where account = ?'
    db.query(selectsql, reginfo.account, (err, results) => {
        if (results.length > 0) {
            return res.send({
                status: 1,
                message: '账户密码已经存在'
            })
        } else {
            //如果没有，进行加密  bcrypt.hashsync 第一个参数为需加密的字符串 第二个为加密的长度
            reginfo.password = bcrypt.hashSync(reginfo.password, 10)
            //账号密码插入到user表中
            const insertsql = 'insert into users set ?'
            //注册身份
            const identity = '用户'
            //创建时间
            const create_time = new Date()
            //query 方法的参数,第一个为sql语句 第二个为参数，第三个为回调函数用于处理结果
            db.query(insertsql, {
                account: reginfo.account,
                password: reginfo.password,
                identity: identity,
                create_time: create_time,
                //初始默认状态 ，表示未冻结
                status: 0,
            }, (err, results) => {
                //如果插入成功/失败的回调  affectedRows 为影响到的行数，如果失败，行数不会超过1
                if (results.affectedRows !== 1) {
                    return res.send({
                        status: 1,
                        message: '注册账号失败,请重试'
                    })
                } else {
                    return res.send({
                        status: 1,
                        message: '注册账号成功!!'
                    })
                }
            })
        }
    })
}

//登录逻辑
exports.login = (req, res) => {
    const loginfo = req.body
    //查看数据表中是否有本次请求的账号
    const selectsql = 'select * from  users where account = ?'
    db.query(selectsql, loginfo.account, (err, results) => {
        if (err) return res.cc(err)
        if (results.length !== 1) return res.cc('登录失败')

        //如果没有失败，对前端密码进行校验
        const compareResult = bcrypt.compareSync(loginfo.password, results[0].password)
        if (!compareResult) {
            return res.send('登陆失败')
        }

        //对账号状态进行判定
        if (results[0].status == 1) {
            return res.cc('账号被冻结')
        }

        //生成返回给前端的token
        const token = generateToken(results[0].id)
        console.log(token)
        //剔除加密后的密码，头像，创建/更新时间
        const user = {
            ...results[0],
            password: "",
            ImageUrl: "",
            create_time: "",
            update_time: ""
        }

        // //设置token有效时长
        // const tokenStr = jwt.sign(user, jwtconfig.JwtSecretkey, {
        //     expiresIn: '7h'
        // })

        //返回token给前端
        res.send({
            status: 0,
            user: user,
            message: '登录成功',
            //token内部规则要在前面家Bearer
            token: token
        })

    })
}


